package com.example.scenictourback.controller;

import com.example.scenictourback.common.Result;
import com.example.scenictourback.dto.UserDTO;
import com.example.scenictourback.entity.User;
import com.example.scenictourback.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/api/user")
public class UserController {
    
    @Autowired
    private UserService userService;
    
    /**
     * 获取所有用户列表（管理员权限）
     */
    @GetMapping("/all")
    @PreAuthorize("hasRole('ADMIN')")
    public Result<?> listAllUsers() {
        List<UserDTO> users = userService.listAllUsers();
        return Result.success(users);
    }
    
    /**
     * 根据ID获取用户详情
     */
    @GetMapping("/{id}")
    public Result<?> getUserById(@PathVariable Integer id) {
        UserDTO user = userService.getUserById(id);
        return Result.success(user);
    }
    
    /**
     * 更新用户信息（管理员权限）
     */
    @PutMapping("/{id}")
    @PreAuthorize("hasRole('ADMIN')")
    public Result<?> updateUser(@PathVariable Integer id, @RequestBody User user) {
        UserDTO updatedUser = userService.updateUser(id, user);
        return Result.success("更新成功", updatedUser);
    }
    
    /**
     * 禁用用户（管理员权限）
     */
    @PutMapping("/{id}/disable")
    @PreAuthorize("hasRole('ADMIN')")
    public Result<?> disableUser(@PathVariable Integer id) {
        UserDTO disabledUser = userService.updateUserStatus(id, 0);
        return Result.success("禁用成功", disabledUser);
    }
    
    /**
     * 启用用户（管理员权限）
     */
    @PutMapping("/{id}/enable")
    @PreAuthorize("hasRole('ADMIN')")
    public Result<?> enableUser(@PathVariable Integer id) {
        UserDTO enabledUser = userService.updateUserStatus(id, 1);
        return Result.success("启用成功", enabledUser);
    }
    
    /**
     * 删除用户（管理员权限）
     */
    @DeleteMapping("/{id}")
    @PreAuthorize("hasRole('ADMIN')")
    public Result<?> deleteUser(@PathVariable Integer id) {
        userService.deleteUser(id);
        return Result.success("删除成功");
    }
    
    /**
     * 获取用户统计数据（管理员权限）
     */
    @GetMapping("/stats")
    @PreAuthorize("hasRole('ADMIN')")
    public Result<?> getUserStats() {
        Map<String, Object> stats = userService.getUserStats();
        return Result.success(stats);
    }
} 